In some past computer systems and particularly ones having virtual storage addressing, the central processing unit (CPU) would utilize virtual storage addresses which were converted or translated to real storage addresses for addressing real main storage. The virtual addresses are or appear to be sequential, but the real main storage is structured into pages having a fixed number of bytes where the pages may or may not be sequential in main storage. Hence, if the translation of the virtual storage address resulted in a real storage address which crosses a page boundary, a wrongful storage location could be addressed whereby data at that location could be destroyed without the ability to recover. The data base and code space in main storage could be destroyed.
In such computer systems it was essential to have means for determining if a page boundary were crossed so that the virtual storage address could be re-translated to a real main storage address for the correct page. In those computer systems the CPU handled main storage addressing for both the CPU and the I/O functions. Part of the address translation process included a check to determine if a page boundary were crossed, and as previously explained, if one were crossed the virtual address was re-translated.
Because the I/O units were unable to operate on the real main storage addresses, they were prevented from destroying the data base or code space in real main storage. Although the I/O units could increment or decrement the virtual storage addresses in a manner to cause a page crossing, such would be detected by the CPU during the translation process and a re-translation would take place to provide the correct real main storage address.
In computer systems incorporating the present invention, the I/O units control their own use of main storage addressing. The I/O units work with real main storage addresses. Thus, the page crossing detection means of past computer systems are not useable. The CPU with this arrangement is not tied up during the I/O data transfer operation, which is a benefit, but also has no way of checking if the real addresses used for the I/O data transfers resulted in page crossings.
Typically, in computer systems incorporating the present invention, the CPU will send an I/O unit a command together with several real main storage addresses which the I/O unit then utilizes during data transfer, read or write, as the result of executing the command. After each data transfer, the I/O unit increments or decrements the real main storage address it has been working with until it is necessary to use the next real main storage address which had been furnished to it with the command from the CPU. This action continues until the command is completely executed, and if no error occurs, all of the real main storage addresses furnished with the command will have been used.
It is the incrementing or decrementing of the real main storage addresses by the I/O units which could result in a page crossing. As previously indicated, any undetected page crossing can result in destruction of the data base or the code space. The I/O unit would no longer be working with the real main storage space assigned to it and the damage is unpredictable. Hence, error recovery would be very difficult if not impossible. The need for detection of use of wrong real main storage addresses by the I/O units is accentuated when the I/O units do not have checking schemes such as parity predict logic in their main storage address calculation means.
The present invention thus is particularly useful in computer systems where the I/O units use real main storage addresses for data transfers and where the number of bytes which can be transferred exceed the number of bytes in a page of storage. The present invention is also useful for storage read protect. This permits sharing of areas in storage. For example, an area in storage may be designated as a read only area. Any write operations to this read only area will be prevented and a storage addressing error will be indicated by the present invention.